﻿using System;
using System.Collections.Generic;
using System.Text;
using SistemaLib.sipe.db.sqlserver;
using SistemaLib.Entidades;
using SistemaLib.sipe.db.general;
using SistemaLib.sipe.util;
using System.Data;

namespace SistemaLib.Persistencia
{
    public class DbTareaAsignacion : DbBase
    {
        private void Agregar(TareaAsignacion tas)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "TareasAsignaciones";
            sql.addCampo("idTarea");
            sql.addCampo("idRH");
            sql.addCampo("fecha");
            sql.addCampo("horas");


            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, tas.IdTarea));
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, tas.IdRH));
            col.Add(DbConnection.SqlInputParam("@fecha", DbTipo.Fecha, 0, tas.Fecha));
            col.Add(DbConnection.SqlInputParam("@horas", DbTipo.Float, 0, tas.Horas));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getInsert(), col, CommandType.Text, out id);

            tas.Id = int.Parse(id.ToString());
        }

        private void Modificar(TareaAsignacion tas)
        {
            DbScriptGenerator sql = new DbScriptGenerator();

            sql.Tabla = "TareasAsignaciones";
            sql.CampoClave = "id";
            sql.addCampo("idTarea");
            sql.addCampo("idRH");
            sql.addCampo("fecha");
            sql.addCampo("horas");


            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, tas.IdTarea));
            col.Add(DbConnection.SqlInputParam("@idTarea", DbTipo.Entero, 0, tas.IdTarea));
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, tas.IdRH));
            col.Add(DbConnection.SqlInputParam("@fecha", DbTipo.Fecha, 0, tas.Fecha));
            col.Add(DbConnection.SqlInputParam("@horas", DbTipo.Float, 0, tas.Horas));


            object id;
            this.DbConnection.RunScalarProcedure(sql.getInsert(), col, CommandType.Text, out id);
        }

        internal void Eliminar(int idTas)
        {
            string sql = "delete from TareasAsignaciones where id = @id";

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, idTas));

            int cant;
            this.DbConnection.RunNonQueryProcedure(sql, col, CommandType.Text, out cant);
        }

        internal void Guardar(TareaAsignacion tas)
        {
            if (tas.Id == 0)
                Agregar(tas);
            else
                Modificar(tas);
        }

        private void Cargar(DataRow fila, TareaAsignacion obj)
        {
            obj.Id = ObtieneCampo.TipoInt(fila, "id");
            obj.IdTarea = ObtieneCampo.TipoInt(fila, "idTarea");
            obj.IdRH = ObtieneCampo.TipoInt(fila, "idRH");
            obj.Fecha = ObtieneCampo.TipoFecha(fila, "fecha");
            obj.Horas = ObtieneCampo.TipoMoneda(fila, "horas");
        }

        public TareaAsignacion CargarTareaAsignacionPorId(int idTas)
        {
            TareaAsignacion obj = new TareaAsignacion();

            string sql = @"select * from TareasAsignaciones where id = @id";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@id", DbTipo.Entero, 0, idTas));

            this.DbConnection.RunDataSetProcedure(sql, col, CommandType.Text, out ds);

            if (ds != null && ds.Tables[0].Rows.Count > 0)
            {
                DataRow fila = ds.Tables[0].Rows[0];
                Cargar(fila, obj);
            }

            return obj;
        }

        public DataSet ListarTareasAsignaciones()
        {
            string sql = @"select * from TareasAsignaciones order by fechaCreacion desc";

            DataSet ds;

            this.DbConnection.RunDataSetProcedure(sql, CommandType.Text, out ds);

            return ds;
        }


        public List<TareaAsignacion> ListarAsignacionesPorRecursoyFecha(int idRH)
        {
            string sql = @"select * from TareasAsignaciones where idRH = @idRH";

            DataSet ds;

            DbParameterCollection col = new DbParameterCollection();
            col.Add(DbConnection.SqlInputParam("@idRH", DbTipo.Entero, 0, idRH));

            this.DbConnection.RunDataSetProcedure(sql, CommandType.Text, out ds);

            List<TareaAsignacion> lista = new List<TareaAsignacion>();

            foreach (DataRow fila in ds.Tables[0].Rows)
            {
                TareaAsignacion cal = new TareaAsignacion();
                Cargar(fila, cal);
            }

            return lista;

        }
    }
}
